git rebase
是一个经常用以美化分支线的指令,近来听说了一个 squash
的指令可以用来合并多个 commits
,研究后更是觉得 rebase
的神奇了,本文做一个记录。
现在有以下 commits
:
1 | * fc24432 - (HEAD -> master) third commit (2 seconds ago) <cnzsb> |
现在我们把最新提交的 3 次 commit
合并为一次修改则可以使用 git rebase -i HEAD~3
指令(更多参数含义参见 git rebase 文档)。
其中 pick
是挑选出的基准 commit
,对需要合并的 commit
使用 squash
或 s
则会保存该 commit
的 commit message
并合并在其前一个 commit
上,最终自己可以更新 commit message
信息;也可以使用 fixup
或 f
丢弃 commit message
并合并,这样最终的 commit message
会是 pick
的那条信息。
1 | pick 559f659 first commit |
这里使用 squash
,得到下面的信息。
1 | # This is a combination of 3 commits. |
可以看到每个对应的 commit message
,我们这里删掉所有不需要的 commit message
,并且保存为 “create commits.txt and update cotents”,最后可以看到成功信息。
1 | [detached HEAD b073a14] create commits.txt and update cotents |
新的 commits
:
1 | * b073a14 - (HEAD -> master) create commits.txt and update cotents (11 minutes ago) <cnzsb> |